/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siseventos.managed;

import br.siseventos.model.TdTipoAtividade;
import br.siseventos.service.TipoAtividadeService;
import br.siseventos.view.util.CallbackHelper;
import br.siseventos.view.util.MessageHelper;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

/**
 *
 * @author fernando
 */
@ManagedBean(name = "tipoAtividadeBean")
@ViewScoped
public class TipoAtividadeBean extends BaseBean{
        
    //Campos
    private String nome;
    private String descricao;
    private TdTipoAtividade tipoAtividadeSelecionado;
    private TipoAtividadeService tipoAtividadeService;
    private List<TdTipoAtividade> tiposAtividade;
    
        
        //Construtor
           public TipoAtividadeBean() {
               //Inicializar o objeto DAO
               tipoAtividadeService = new TipoAtividadeService();
               
                //Inicializar a lista de participantes
                popularDataTable();
 
    }
        //Getters e Setters
    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the descricao
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao the descricao to set
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return the tipoAtividadeSelecionado
     */
    public TdTipoAtividade getTipoAtividadeSelecionado() {
        return tipoAtividadeSelecionado;
    }

    /**
     * @param tipoAtividadeSelecionado the tipoAtividadeSelecionado to set
     */
    public void setTipoAtividadeSelecionado(TdTipoAtividade tipoAtividadeSelecionado) {
        this.tipoAtividadeSelecionado = tipoAtividadeSelecionado;
    } 

        /**
     * @return the tiposAtividade
     */
    public List<TdTipoAtividade> getTiposAtividade() {
        return tiposAtividade;
    }

    /**
     * @param tiposAtividade the tiposAtividade to set
     */
    public void setTiposAtividade(List<TdTipoAtividade> tiposAtividade) {
        this.tiposAtividade = tiposAtividade;
    }   
    
    //Actions e LIsteners
    
    public void cadastrarTipoAtividade(ActionEvent e){
        //Criando o objeto a ser persistido no banco
        TdTipoAtividade tipoAtividade = new TdTipoAtividade(nome, descricao, null);
        try {
           //Incluindo o objeto no banco
            tipoAtividadeService.incluir(tipoAtividade);
            
            popularDataTable();
            
            //Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de atividade cadastrado com sucesso!",
              FacesMessage.SEVERITY_INFO);
            
            ///Adicionando parâmetro de Callback
            CallbackHelper.addCallback("salvo", true);
        } catch (Exception ex) {
            //Mostrar mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao cadastrar tipo de atividade!", FacesMessage.SEVERITY_ERROR);
        }
    }
    
    public void excluirTipoAtividade(ActionEvent e){
        try {
            //Excluindo o tipo de atividade selecionado
            tipoAtividadeService.excluir(getTipoAtividadeSelecionado().getIdtTipoAtividade());
            
            //Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de atividade excluído com sucesso!",
              FacesMessage.SEVERITY_INFO);
        } catch (Exception ex) {
             //Mostrar mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao excluir tipo de atividade!", FacesMessage.SEVERITY_ERROR);
        }
    }
    
    private void popularDataTable() {
        try {
            // Repopular o DataTable
            tiposAtividade = tipoAtividadeService.consultarTodos();
        } catch (Exception ex) {
            Logger.getLogger(TipoAtividadeBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void alterarTipoAtividade(ActionEvent e){
        try {
            //Alterando o tipo de atividade selecionado
            tipoAtividadeService.alterar(getTipoAtividadeSelecionado());
            
            popularDataTable();
            
            //Mostrar mensagem de sucesso
            MessageHelper.showGlobalMessage("Tipo de atividade alterado com sucesso!",
              FacesMessage.SEVERITY_INFO);
            
            //Adicionando parâmetro de Callback
            CallbackHelper.addCallback("editado", true);
            
        } catch (Exception ex) {
             //Mostrar mensagem de erro
            MessageHelper.showGlobalMessage("Erro ao alterar tipo de atividade!", FacesMessage.SEVERITY_ERROR);
        }
    }  
}
